// Vue 核心方法
import Vue from './instance/index'
// 初始化一些全局API
import { initGlobalAPI } from './global-api/index'
// 判断是不是ssr
import { isServerRendering } from 'core/util/env'
import { FunctionalRenderContext } from 'core/vdom/create-functional-component'

initGlobalAPI(Vue)

/**
 * Vue.prototype 定义属性的对象
 * $isServer 修改的属性的名字
 * descriptor 定义或修改的属性的描述符。
 *  get 通过get 获取对应属性的具体值
 */
Object.defineProperty(Vue.prototype, '$isServer', {
  get: isServerRendering
})

Object.defineProperty(Vue.prototype, '$ssrContext', {
  get () {
    /* istanbul ignore next */
    return this.$vnode && this.$vnode.ssrContext
  }
})

// expose FunctionalRenderContext for ssr runtime helper installation
Object.defineProperty(Vue, 'FunctionalRenderContext', {
  value: FunctionalRenderContext
})

Vue.version = '__VERSION__'

export default Vue
